#面向对象作业
# 1、打印小猫爱吃鱼，小猫要喝水
'''
思路：
1--定义一个猫类
2--实例化一个对象小猫继承猫类
3--小猫可以调用猫类的方法“吃鱼”、“喝水”
'''
class Cat():

    def eat(self,name):
        print(f'{name}爱吃鱼，')

    def drink(self,name):
        print(f'{name}要喝水！')

MM=Cat()
MM.eat("小猫")
MM.drink("小猫")


'''
2、小明爱跑步，爱吃东西。
1）小明体重75.0公斤
2）每次跑步会减肥0.5公斤
3）每次吃东西体重会增加1公斤
4）小美的体重是45.0公斤
思路：
1--定义一个人类
2--实例化对象小明，小美
3--属性：名字，体重
4--方法：吃东西，跑步
'''
class Person():
    def __init__(self,name,weight):
        self.name=name
        self.weight=weight
    def weight_xinxi(self):
        print(f'{self.name}爱跑步，爱吃东西！')
        print(f'{self.name}体重{self.weight}公斤')

    def eat(self):
        self.weight+=1
        print(f'每次吃东西体重会增加1公斤，{self.name}吃完饭后，体重变成{self.weight}公斤')

    def run(self):
        self.weight-=0.5
        print(f'每次跑步会减肥0.5公斤，{self.name}跑步后，体重变成{self.weight}公斤')


xiaoming=Person("小明",75)
xiaomei=Person("小美",45)
xiaoming.weight_xinxi()
xiaoming.run()
xiaomei.weight_xinxi()
xiaomei.eat()


'''
3、摆放家具
需求：
1）.房子有户型，总面积和家具名称列表
   新房子没有任何的家具
2）.家具有名字和占地面积，其中
   床：占4平米
   衣柜：占2平面
   餐桌：占1.5平米
3）.将以上三件家具添加到房子中
4）.打印房子时，要求输出:户型，总面积，剩余面积，家具名称列表
思路：
1--定义类，房子类和家具类
2--添加属性，房子属性：房子总面积，房子剩余面积，房子户型
            家具属性：家具的面积，家具名称
3--定义方法：装家具
                计算剩余面积是否大于家具面积
'''
class jiaju():
    def __init__(self,name,jiaju_area):
        self.jiaju_area=jiaju_area
        self.name=name

class Home():
    def __init__(self,area,huxing):
        self.zarea=area
        self.syarea=area
        self.huxing=huxing
        self.jiajulist=[]
    def fill(self,jiaju1):
        if self.syarea>=jiaju1.jiaju_area:
            self.jiajulist.append(jiaju1.name)
            self.syarea-=jiaju1.jiaju_area
        else:
            print("家具的面积大于房子剩余面积，无法摆放！")
    def __str__(self):
        return f'房子户型为{self.huxing},总面积是{self.zarea},剩余面积是{self.syarea},装填的家具有{self.jiajulist}'

bed=jiaju("床",500)
home1=Home(10000,"两居室")
home1.fill(bed)
print(home1)



'''
4.士兵开枪
需求：
1）.士兵瑞恩有一把AK47
2）.士兵可以开火(士兵开火扣动的是扳机)
3）.枪 能够 发射子弹(把子弹发射出去)
4）.枪 能够 装填子弹 --增加子弹的数量

思路：
1--定义类：士兵，枪类
2--初始化属性：士兵类：名字
              枪类：名字，子弹数量
3--类的方法：士兵：开火
            枪：发射，装填
            
'''
class Gun():
    def __init__(self,name,bullet):
        self.bullet=bullet
        self.name=name
    def shoot(self):
        if(self.bullet>0):
            self.bullet-=1
            print(f'枪能够发射子弹，发射一次，数量变成{self.bullet}')
        elif(self.bullet==0):
            print("枪里没子弹了！")
        else:
            print("输入有误！")
    def Loading(self):
        self.bullet+=1
        print(f'枪能够装填子弹，一次装一枚，数量变成{self.bullet}')
class Person():
    def __init__(self,p_name):
        self.p_name=p_name
    def shoot1(self,gun_name):
        gun_name.shoot()
        print('士兵可以开火！')
    def add_bullet(self,gun_name):
        gun_name.Loading()
    def __str__(self):
        return f'士兵{self.p_name}有一把{b.name}'

if __name__ == '__main__':
    a=Person("瑞恩")
    b=Gun('AK47',10)
    a.shoot1(b)
    a.add_bullet(b)
    print(a)